/**
 * map() 方法创建一个新数组，这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
 * [1,,2]
 * 数组的空值会保留下来
 * @param {*} callback
 * @returns
 */
Array.prototype.myMap = function (callback) {
  if (typeof callback != "function") {
    throw new TypeError("callback must be a fuction ");
  }

  const len = this.length;
  const result = [];
  for (let i = 0; i < len; i++) {
    // map空项保留
    if (!Object.prototype.hasOwnProperty.call(this, i)) {
      result.push(undefined);
    } else {
      let item = callback(this[i], i, this);
      result.push(item);
    }
  }
  return result;
};

// egg
let arr = [1, 2, 3, , 4, 5, undefined];
const res = arr.myMap((item) => {
  return item * 2;
});
console.log("[ res ] >", res);

const res2 = arr.map((item) => {
  return item * 2;
});
console.log("[ ress2 ] >", res2);
